package com.alks.function.mapper;


import com.alks.common.data.dto.SysUserTokenDTO;
import com.alks.entity.data.entity.PcApAmt;
import com.alks.entity.data.entity.PcLotDetail;
import com.alks.entity.data.entity.PcSlipDetailSole;
import com.alks.function.data.dto.PcSlipDetailSoleReq;
import com.alks.function.mapper.finance.costcheck.PcSlipDetailSoleVo;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Param;

import java.math.BigDecimal;
import java.util.List;
import java.util.Set;

/**
 * <p>
 *  Mapper 接口
 * </p>
 *
 * @author author
 * @since 2024-05-24
 */
public interface PcSlipDetailSoleMapper extends BaseMapper<PcSlipDetailSole> {

    List<PcSlipDetailSoleVo> getSoleCheck(PcSlipDetailSoleReq req);

    void optionSoleCheck(@Param("slipNos") List<String> slipNos, @Param("check") String check, @Param("dto") SysUserTokenDTO dto);

    List<PcSlipDetailSoleVo> getSoleCheckDetail(@Param("slipNo") String slipNo, @Param("companyId") String companyId);

    void saveSoleCheck(List<PcSlipDetailSoleVo> list);

    /**
     * 结算作业查询
     * @param financeYymm 结算月份
     * @param accountName 结算方式
     * @param vendorName 厂商
     * @param companyId 公司ID
     * @param userName 用户名
     * @return 结算新增数据
     */
    List<PcApAmt> tempAddQuery(@Param("financeYymm") String financeYymm, @Param("accountName") String accountName, @Param("vendorName") String vendorName, @Param("companyId") String companyId, @Param("userName") String userName);

    /**
     * 结算作业删除回滚
     * @param slipNo 结算单号
     * @param companyId 公司ID
     */
    void tempDel(@Param("slipNo") String slipNo, @Param("companyId") String companyId);

    /**
     * 结算作业写入结算单号
     *
     * @param financeYymm 结算月份
     * @param accountName 结算方式
     * @param vendorName  厂商
     * @param balanceNo   结算单号
     * @param companyId 公司ID
     */
    void tempAddUp(@Param("financeYymm") String financeYymm, @Param("accountName") String accountName, @Param("vendorName") String vendorName, @Param("balanceNo") String balanceNo, @Param("companyId") String companyId);

    BigDecimal getPcUnitPrice(PcSlipDetailSoleVo detailPartBf2);

    /**
     * 获取可结算部分类型名称
     *
     * @param financeYymm 结算月份
     * @param companyId   公司ID
     * @param accountName 结算方式
     * @return 可结算部分类型名称
     */
    Set<String> selectSeqName(@Param("financeYymm") String financeYymm, @Param("companyId") String companyId, @Param("accountName") String accountName);

    Integer refreshSoleCheck(@Param("companyId") String companyId);

    List<PcLotDetail> getRefreshSoleCheck(@Param("companyId") String companyId);

    int updateSupply(@Param("list") List<PcLotDetail> list);

    int deleteSoleCheck(@Param("slipNos") List<String> slipNos, @Param("companyId") String companyId);

    /**
     * 获取结算单号覆写不完全数据
     * @param companyId 公司ID
     * @return 未完全结算数据
     */
    List<PcSlipDetailSole> getUnBalance(@Param("companyId") String companyId);

    /*查询当日审核单据数量*/
    Integer getSoleCheckDetailCfmCount(String companyId, String type);
}
